package com.heima.day530_面向对象;

public class Student {
    /*      面向对象
    三大特征：封装，继承，多态
    面向过程：完成一个功能的过程每步都是自己来做
    面向对象：完成一个功能，不用关心具体步骤，找具有该功能的对象来做

    面向对象

        类：现实生活中一类具有相同属性和行为的事物的抽象！
            属性：有什么
            行为：能做什么
        对象：类的具体体现，是客观重载的现实事物！
    类是对象的模板！
    对象是类的实例！

     不同对象所记录的成员变量的值可以不同！
所记录的成员方法的值是相同的，都是引用的方法区里同一个方法地址。

  1.多个对象指向相同时，任意一方修改了堆里的数据，其他人再来访问的都是改变后的值。
   2.当一个对象所记录的值为null时，再用该对象去访问堆里的数据(成员变量，成员方法)时，就会重新空指针异常。
   3.当堆里的某块空间在栈中没人指向时，也就是没人能找到它时，这块空间就会被标记为"内存垃圾"，会在"垃圾回收器"空闲时，自动进行清理回收。

   ！！封装！！

    private

    this
        1.this的作用：用来区分局部变量和成员变量，用this.变量名，找的是成员变量
        2.this的细节：在方法中访问类的成员（成员变量）时，默认成员前面隐含this
        3.this的原理：哪个对象调用方法，方法中的this就表示哪个对象！

        javaBean：封装数据
                1.成员变量私有化
                2.私有成员提供对应的get/set方法
                3.无参构造
                4.满参构造

        创建方法快捷键:鼠标右键选Generate>getter and setter ,
                        创建无参和满参构造方法选第一个
     */
    //属性：姓名，年龄
    private String name;
    private int age;

    //构造方法的作用：创建对象使用
    public Student() {
        System.out.println("我是学生");
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }


    public void setName(String name) {
        this.name = name;
    }
        /*
        就近访问原则：通过变量名访问时，会先在局部位置找有没有该名称的变量，有就直接用，没有才会去成员位置找
                        ---通过this关键字解决

         */



    public String getName() {
        return this.name;

    }

    //设置值
    public void setAge(int a) {
        if (a >= 0 && a <= 120) {
            age = a;
        } else {
            System.out.println("输入的年龄不合理");
        }
    }

    public int getAge() {
        return this.age;
    }

    public void show() {
        System.out.println(this.name + "..." + this.age);
    }


}
